//线程中断
public class Test_2_4 {
    public static void main(String[] args) throws InterruptedException {
        // 创建一个线程
        Thread thread = new Thread(() -> {
            while(!Thread.currentThread().isInterrupted()){
                //Thread.currentThread() 是 Java 中用于获取当前执行线程引用的静态方法
                //实例方法，用于检测调用该方法的线程对象所对应的线程是否被中断，
                //即检测其线程的中断标志位是否为true 。
                //与interrupted() 不同的是，它不会清除中断标志位。
                System.out.println(Thread.currentThread().getName() + " :正在转账");
                try {
                    Thread.sleep(1000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                    System.out.println(Thread.currentThread().getName() + " :有内鬼，终止交易！");
                    //注意此处的break，不要忽略
                    //如果忽略，线程虽然被中断了，但是线程的状态还是RUNNABLE，
                    // 所以线程还会继续执行，直到结束
                    break;
                }
            }
            System.out.println(Thread.currentThread().getName() + " :啊! 险些误了大事");
        },"李四");
        System.out.println(thread.getName() + " :让李四开始转账");
        // 启动线程
        thread.start();
        Thread.sleep(3*1000);
        System.out.println(thread.getName() + " :让李四停止转账,对方是个骗子");
        // 中断线程
        //调用该方法会设置调用此方法的线程对象所对应的线程的中断标志位为true 。
        //如果目标线程处于被阻塞状态（如wait、sleep、join 等），
        //会使线程抛出InterruptedException异常，从而提前结束阻塞状态。
        thread.interrupt();
    }
}
